åå®å šãªå ¥åæ€èšŒãã¿ãŒã³ãçšããŠãå ç¢ã§å®å šãªWebãã©ãŒã ãæ§ç¯ããæ¹æ³ãåŠã³ãŸããããããŒã¿ã®æŽåæ§ãšè¯å¥œãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã確ä¿ããŸãããã®ã¬ã€ãã§ã¯ãã°ããŒãã«ãªèªè åãã«ãã¹ããã©ã¯ãã£ã¹ãšå®è·µäŸã解説ããŸãã
åå®å šãªãã©ãŒã åŠçïŒå ¥åæ€èšŒã¿ã€ããã¿ãŒã³
Webéçºã®äžçã«ãããŠããã©ãŒã ã¯ãŠãŒã¶ãŒãã¢ããªã±ãŒã·ã§ã³ãšå¯Ÿè©±ããããã®å ¥ãå£ã§ããã·ã³ãã«ãªåãåãããã©ãŒã ããè€éãªEã³ããŒã¹ã®ãã§ãã¯ã¢ãŠããŸã§ããããã®ãã©ãŒã ãéããŠåéãããããŒã¿ã¯éåžžã«éèŠã§ãããã®ããŒã¿ã®æ£ç¢ºæ§ãæŽåæ§ãã»ãã¥ãªãã£ã確ä¿ããããšã¯æéèŠèª²é¡ã§ãããã®ããã°æçš¿ã§ã¯ãäžçäžã®éçºè ã«é©çšã§ããåå®å šãªå ¥åæ€èšŒãã¿ãŒã³ã䜿çšããŠãå ç¢ãªãã©ãŒã åŠçãå®çŸããæ¹æ³ãæ¢ããŸãã
å ¥åæ€èšŒã®éèŠæ§
å ¥åæ€èšŒã¯ããŠãŒã¶ãŒãæäŸããããŒã¿ãç¹å®ã®åºæºãæºãããŠããããšã確èªããããã»ã¹ã§ããããã¯ãããŸããŸãªåé¡ã«å¯Ÿãã第äžã®é²åŸ¡ç·ãšãªããŸãã
- ããŒã¿ã®æŽåæ§ïŒäžæ£ç¢ºãŸãã¯æªæã®ããããŒã¿ãã¢ããªã±ãŒã·ã§ã³ã®ããŒã¿ã¹ãã¢ãç Žå£ããã®ãé²ããŸãã
- ã»ãã¥ãªãã£ïŒã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒãSQLã€ã³ãžã§ã¯ã·ã§ã³ããã®ä»ã®è匱æ§ãªã©ã®ãªã¹ã¯ã軜æžããŸãã
- ãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ïŒãŠãŒã¶ãŒã«å³åº§ã«ãã£ãŒãããã¯ãæäŸãããšã©ãŒãä¿®æ£ããããã«èªå°ããŠãå šäœçãªäœ¿ãããããåäžãããŸãã仿¥ã®ã°ããŒãã«åžå Žã§ã¯ãè¯å¥œãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ã極ããŠéèŠã§ãã
- ã¢ããªã±ãŒã·ã§ã³ã®å®å®æ§ïŒäžæ£ãªããŒã¿ã«ãã£ãŠåŒãèµ·ããããäºæãã¬ãšã©ãŒãã¯ã©ãã·ã¥ãé²ããŸãã
å ç¢ãªå ¥åæ€èšŒããªããã°ãã¢ããªã±ãŒã·ã§ã³ã¯ããŒã¿æŒæŽ©ãããã©ãŒãã³ã¹ã®åé¡ãããã³è©å€ã®æå®³ãåãããããªããŸããããã¯ç¹ã«åœéçãªæèã§éèŠã§ãããããŒã¿ãã©ã€ãã·ãŒèŠå¶ïŒãšãŒãããã®GDPRãã«ãªãã©ã«ãã¢ã®CCPAãªã©ïŒã¯ãéåã«å¯ŸããŠé倧ãªçœ°åã課ããŸãã
åŸæ¥ã®æ€èšŒæ¹æ³ãšãã®éç
æŽå²çã«ãå ¥åæ€èšŒã¯ããã€ãã®æ¹æ³ã«äŸåããŠããŸããããããããã«çæããããŸããã
- ã¯ã©ã€ã¢ã³ããµã€ãæ€èšŒïŒJavaScriptïŒïŒãŠãŒã¶ãŒã«å³åº§ã«ãã£ãŒãããã¯ãæäŸããŸãããJavaScriptãç¡å¹ã«ãªã£ãŠãããæäœãããŠããå Žåã¯åé¿ãããå¯èœæ§ããããŸããç°ãªãå°åã®åœéçãªãŠãŒã¶ãŒããŠã§ããµã€ãã«ã¢ã¯ã»ã¹ããéã«ã¯äŸ¿å©ã§ãããå®å šã§ã¯ãããŸããã
- ãµãŒããŒãµã€ãæ€èšŒïŒã»ãã¥ãªãã£ãšããŒã¿ã®æŽåæ§ã«ã¯äžå¯æ¬ ã§ãããæ€èšŒãšã©ãŒã¯ããŒã¿ãéä¿¡ãããåŸã«å ±åãããããšãå€ãããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãäœäžãããŸããããã¯ãã€ã³ã¿ãŒãããã¢ã¯ã»ã¹é床ãããã€ã¹ã«é¢ä¿ãªããäžçäžã®ãŠãŒã¶ãŒã«ãšã£ãŠäžæºãšãªãå¯èœæ§ããããŸãã
- æ£èŠè¡šçŸïŒãã¿ãŒã³ãããã³ã°ã«åŒ·åã§ãããè€éã§ä¿å®ãé£ããå ŽåããããŸããè€éãªæ£èŠè¡šçŸã¯ãç¹ã«å€ãã®çºå±éäžåœã§äžè¬çã§ããåŠçèœåã®äœãããã€ã¹ã§ã¯ãããã©ãŒãã³ã¹ã«åœ±é¿ãäžããå¯èœæ§ããããŸãã
- ã©ã€ãã©ãªãšãã¬ãŒã ã¯ãŒã¯ïŒäºåã«æ§ç¯ãããæ€èšŒã³ã³ããŒãã³ããæäŸããŸãããç¹å®ã®èŠä»¶ãåŠçããããæ¢åã®ã·ã¹ãã ãšã·ãŒã ã¬ã¹ã«çµ±åãããããã®ã«åžžã«ååãªæè»æ§ããããšã¯éããŸããã
ãããã®åŸæ¥ã®æ¹æ³ã¯éèŠã§ãããã®ã®ãçŸä»£ã®éçºãã©ã¯ãã£ã¹ãéèŠããåå®å šæ§ãæ¬ ããŠããããšããããããŸããåå®å šæ§ã¯ãããŒã¿ãäºåå®çŸ©ãããåã«æºæ ããããšãä¿èšŒãããšã©ãŒãæžãããã³ãŒãã®ä¿å®ãšãããã°ã容æã«ããŸãã
åå®å šãªå ¥åæ€èšŒã®å°é
åå®å šãªå ¥åæ€èšŒã¯ãç¹ã«TypeScriptã®ãããªèšèªã«ãããŠéçåä»ãã®åãæŽ»çšããã³ã³ãã€ã«æã«ããŒã¿å¶çŽã匷å¶ããŸãããã®ã¢ãããŒãã«ã¯ããã€ãã®å©ç¹ããããŸãã
- æ©æãšã©ãŒæ€åºïŒãšã©ãŒã¯ã³ãŒãããããã€ãããåã®éçºäžã«ææãããã©ã³ã¿ã€ã ã®ãã°ãæžå°ããŸããããã¯ããªã³ãµã€ããããã°ã«åžžã«å®¹æã«ã¢ã¯ã»ã¹ã§ãããšã¯éããªãåœéçãªããŒã ã«ãšã£ãŠéèŠãªå©ç¹ã§ãã
- ã³ãŒãä¿å®æ§ã®åäžïŒåã¢ãããŒã·ã§ã³ã«ãããç¹ã«å€§èŠæš¡ãããžã§ã¯ããè€æ°ã®éçºè ãé¢äžããå Žåã«ãã³ãŒããèªã¿ãããçè§£ãããããªããŸãã
- ãªãã¡ã¯ã¿ãªã³ã°ã®åŒ·åïŒåå®å šæ§ã«ãããã³ã³ãã€ã©ã倿Žã«ãã£ãŠåŒãèµ·ããããæœåšçãªåé¡ãæ€åºã§ãããããã³ãŒãã®ãªãã¡ã¯ã¿ãªã³ã°ãããå®å šã«ãªããŸãã
- éçºè ãšã¯ã¹ããªãšã³ã¹ã®åäžïŒIDEã¯ã€ã³ããªãžã§ã³ããªã³ãŒãè£å®ãšãšã©ãŒãã§ãã¯ãæäŸããçç£æ§ãåäžãããŸãã
ç¹ã«TypeScriptã¯ãå ç¢ã§ã¹ã±ãŒã©ãã«ãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã®äººæ°ã®ããéžæè¢ãšãªã£ãŠããŸãããã©ãŒã å ¥åã®åãå®çŸ©ããèœåãšããã®å æ¬çãªæ©èœã«ãããåå®å šãªå ¥åæ€èšŒã«çæ³çã§ãã
å ¥åæ€èšŒã¿ã€ããã¿ãŒã³ïŒå®è·µã¬ã€ã
TypeScriptã䜿çšããŠäžè¬çãªãã©ãŒã å ¥åå€ãæ€èšŒããããã®ãããã€ãã®å®è·µçãªåãã¿ãŒã³ãèŠãŠãããŸãããããããã®äŸã¯ãäžçäžã®éçºè ã«é©å¿å¯èœã§é©çšã§ããããã«èšèšãããŠããŸãã
1. æååæ€èšŒ
æååæ€èšŒã¯ãããã¹ãå ¥åã®åœ¢åŒãšé·ãã確ä¿ããããã«äžå¯æ¬ ã§ãã
interface StringInput {
value: string;
minLength?: number;
maxLength?: number;
pattern?: RegExp;
}
function validateString(input: StringInput): boolean {
if (input.minLength !== undefined && input.value.length < input.minLength) {
return false;
}
if (input.maxLength !== undefined && input.value.length > input.maxLength) {
return false;
}
if (input.pattern !== undefined && !input.pattern.test(input.value)) {
return false;
}
return true;
}
// Example usage:
const nameInput: StringInput = {
value: 'John Doe',
minLength: 2,
maxLength: 50,
pattern: /^[a-zA-Z\s]+$/ // Only letters and spaces
};
const isValidName = validateString(nameInput);
console.log('Name is valid:', isValidName);
ãã®äŸã§ã¯ãå ¥åå€ãæå°ããã³æå€§é·ãæ£èŠè¡šçŸãã¿ãŒã³çšã®ããããã£ãæã€ `StringInput` ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŠããŸãã`validateString` 颿°ã¯ãããã®å¶çŽããã§ãã¯ããå ¥åãæå¹ãã©ããã瀺ãããŒã«å€ãè¿ããŸãããã®ãã¿ãŒã³ã¯ãäžçäžã§äœ¿çšãããããŸããŸãªèšèªãæåã»ããã«å®¹æã«é©å¿ã§ããŸãã
2. æ°å€æ€èšŒ
æ°å€æ€èšŒã¯ãæ°å€å ¥åãæå®ãããç¯å²å ã«ããããšãä¿èšŒããŸãã
interface NumberInput {
value: number;
minValue?: number;
maxValue?: number;
}
function validateNumber(input: NumberInput): boolean {
if (input.minValue !== undefined && input.value < input.minValue) {
return false;
}
if (input.maxValue !== undefined && input.value > input.maxValue) {
return false;
}
return true;
}
// Example usage:
const ageInput: NumberInput = {
value: 30,
minValue: 0,
maxValue: 120
};
const isValidAge = validateNumber(ageInput);
console.log('Age is valid:', isValidAge);
ãã®ãã¿ãŒã³ã¯ãæ°å€ãæå°å€ãæå€§å€ã®ããããã£ãæã€ `NumberInput` ã€ã³ã¿ãŒãã§ãŒã¹ãå®çŸ©ããŸãã`validateNumber` 颿°ã¯ãå ¥åãæå®ãããç¯å²å ã«ãããã©ããããã§ãã¯ããŸããããã¯ãå¹Žéœ¢ãæ°éããã®ä»ã®æ°å€ããŒã¿ãã€ã³ããæ€èšŒããã®ã«ç¹ã«åœ¹ç«ã¡ããããã¯ã°ããŒãã«ã«éèŠã§ãã
3. ã¡ãŒã«æ€èšŒ
ã¡ãŒã«æ€èšŒã¯ãæäŸãããå ¥åãæå¹ãªã¡ãŒã«ã¢ãã¬ã¹ã§ããããšãä¿èšŒããŸãã
interface EmailInput {
value: string;
}
function validateEmail(input: EmailInput): boolean {
// A more robust regex is recommended for production
const emailRegex = /^[\w-\.]+@([\w-]+\.)+[\w-]{2,4}$/;
return emailRegex.test(input.value);
}
// Example usage:
const emailInput: EmailInput = {
value: 'john.doe@example.com'
};
const isValidEmail = validateEmail(emailInput);
console.log('Email is valid:', isValidEmail);
ãã®äŸã§ã¯ç°¡ç¥åãããæ£èŠè¡šçŸã䜿çšããŠããŸãããã°ããŒãã«ãªã¡ãŒã«ã¢ãã¬ã¹åœ¢åŒã®ããªãšãŒã·ã§ã³ãåŠçããããã«ãæ¬çªç°å¢ã§ã¯ããå ç¢ãªæ£èŠè¡šçŸãæšå¥šãããŸããããè€éãªæ€èšŒã«ãŒã«ã«ã¯ãvalidator.jsã®ãããªã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ãããã¡ãŒã«åœ¢åŒã¯åœãçµç¹ã«ãã£ãŠç°ãªããããããã¯éèŠã§ãã
4. æ¥ä»æ€èšŒ
æ¥ä»æ€èšŒã¯ãæäŸãããå ¥åãæå¹ãªæ¥ä»ã§ããããªãã·ã§ã³ã§æå®ãããç¯å²å ã«ããããšãä¿èšŒããŸããã°ããŒãã«ãªèªè ã«å¯Ÿå¿ããããã«ã¯ãããŸããŸãªæ¥ä»åœ¢åŒãåŠçããããšãéèŠã§ãã
interface DateInput {
value: string; // Assuming a string format like YYYY-MM-DD
minDate?: string; // YYYY-MM-DD format
maxDate?: string; // YYYY-MM-DD format
}
function validateDate(input: DateInput): boolean {
try {
const date = new Date(input.value);
if (isNaN(date.getTime())) {
return false; // Invalid date format
}
if (input.minDate) {
const minDate = new Date(input.minDate);
if (date < minDate) {
return false;
}
}
if (input.maxDate) {
const maxDate = new Date(input.maxDate);
if (date > maxDate) {
return false;
}
}
return true;
} catch (error) {
return false;
}
}
// Example usage:
const dateInput: DateInput = {
value: '2023-10-27',
minDate: '2023-01-01',
maxDate: '2023-12-31'
};
const isValidDate = validateDate(dateInput);
console.log('Date is valid:', isValidDate);
ãã®äŸã¯ãåœéçãªäžè²«æ§ã®ããã«ãäžè²«ããæ¥ä»åœ¢åŒïŒYYYY-MM-DDïŒã®éèŠæ§ã匷調ããŠããŸããæ¥ä»ãæ±ãéã«ã¯ãã¿ã€ã ãŸãŒã³ãšããŒã«ã©ã€ãŒãŒã·ã§ã³ãèæ ®ããããšã極ããŠéèŠã§ããMoment.jsãdate-fnsã®ãããªã©ã€ãã©ãªã¯ãæ¥ä»ã®è§£æããã©ãŒããããã¿ã€ã ãŸãŒã³ç®¡çã«åœ¹ç«ã¡ãŸããæ¥ä»åœ¢åŒã«ãããæåçãªéãã«æ³šæããŠãã ããããŠãŒã¶ãŒã«æ¥ä»ãæ£ããå ¥åããæ¹æ³ã«é¢ããæç¢ºãªæç€ºãšäŸãæäŸããããšãæ€èšããŠãã ãããäžéšã®åœã§ã¯ãæ¥ãæã®åã«æ¥ãŸãããŠãŒã¶ãŒãããŒã¿ãå ¥åããåŸãäžè²«ãã圢åŒã§æ¥ä»ã衚瀺ããããšã§ããŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžããŸãã
5. ã«ã¹ã¿ã æ€èšŒé¢æ°
ããè€éãªæ€èšŒèŠä»¶ã«ã¯ãã«ã¹ã¿ã æ€èšŒé¢æ°ãäœæã§ããŸãã
interface CustomValidationInput {
value: any;
validationFunction: (value: any) => boolean;
}
function validateCustom(input: CustomValidationInput): boolean {
return input.validationFunction(input.value);
}
// Example: Validating a password (example only, needs security review)
function isStrongPassword(password: string): boolean {
// Implement your password strength rules here (e.g., length, special characters, etc.)
return password.length >= 8 && /[!@#$%^&*()_+{}\[\]:;<>,.?~\-]/.test(password);
}
const passwordInput: CustomValidationInput = {
value: 'StrongP@ssword123',
validationFunction: isStrongPassword
};
const isPasswordValid = validateCustom(passwordInput);
console.log('Password is valid:', isPasswordValid);
ãã®ã¢ãããŒãã¯ããã¹ã¯ãŒãã®åŒ·åºŠãããŒã¿æŽåæ§ãã§ãã¯ãªã©ãç¹å®ã®ããžãã¹èŠä»¶ã«åãããŠæ€èšŒã«ãŒã«ã調æŽããæè»æ§ãæäŸããŸããããã¯ãç°ãªããã±ãŒã«ãèŠå¶èŠä»¶ã«å®¹æã«é©å¿ã§ããŸãã
åå®å šãªå ¥åæ€èšŒãå®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹
åå®å šãªå ¥åæ€èšŒã广çã«å®è£ ããããã®ãã¹ããã©ã¯ãã£ã¹ãããã€ã玹ä»ããŸãã
- æç¢ºãªåãå®çŸ©ããïŒåå ¥åãã£ãŒã«ãã®æåŸ ãããããŒã¿æ§é ãæç¢ºã«å®çŸ©ããããã«ãã€ã³ã¿ãŒãã§ãŒã¹ãŸãã¯åã䜿çšããŸãã
- èšè¿°çãªååã䜿çšããïŒã€ã³ã¿ãŒãã§ãŒã¹ãåãæ€èšŒé¢æ°ã«ã¯æå³ã®ããååãéžæããŸãã
- é¢å¿ãåé¢ããïŒããè¯ãæŽçãšä¿å®æ§ã®ããã«ãæ€èšŒããžãã¯ãã³ãŒãã®ä»ã®éšåããåé¢ããŸãã
- ãŠãŒã¶ãŒãã¬ã³ããªãŒãªãšã©ãŒã¡ãã»ãŒãžãæäŸããïŒæ€èšŒãšã©ãŒããŠãŒã¶ãŒã«åãããããæ¹æ³ã§æç¢ºã«äŒããŸãããšã©ãŒã¡ãã»ãŒãžã¯ã°ããŒãã«ãªãªãŒãã£ãšã³ã¹åãã«ããŒã«ã©ã€ãºãããã¹ãã§ãã
- ããŒã«ã©ã€ãŒãŒã·ã§ã³ãèæ ®ããïŒããŸããŸãªèšèªãæåã»ãããæ¥ä»/æå»åœ¢åŒãåŠçããããã«æ€èšŒããžãã¯ãèšèšããŸããåœéåïŒi18nïŒããã³ããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒl10nïŒã©ã€ãã©ãªã掻çšããŸãã
- ã¯ã©ã€ã¢ã³ããµã€ããšãµãŒããŒãµã€ãã®äž¡æ¹ã§æ€èšŒãå®è£ ããïŒã¯ã©ã€ã¢ã³ããµã€ãæ€èšŒã¯å³åº§ã®ãã£ãŒãããã¯ãæäŸããŸããããµãŒããŒãµã€ãæ€èšŒã¯ã»ãã¥ãªãã£ãšããŒã¿ã®æŽåæ§ã®ããã«äžå¯æ¬ ã§ããããŒã¿ã¯åžžã«ãµãŒããŒåŽã§æ€èšŒããŠãã ããã
- æ€èšŒã©ã€ãã©ãªã䜿çšããïŒæ€èšŒããã»ã¹ãç°¡çŽ åããå¹çåããããã«ã`yup`ã`zod`ã`class-validator`ãªã©ã®æ€èšŒã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããããããã®ã©ã€ãã©ãªã¯ãã¹ããŒãå®çŸ©ããšã©ãŒåŠçãããŒã¿å€æãªã©ã®æ©èœãæäŸããããšããããããŸããéžæããã©ã€ãã©ãªãåœéåããµããŒãããŠããããšã確èªããŠãã ããã
- 培åºçã«ãã¹ãããïŒæå¹ãªããŒã¿ãšç¡å¹ãªããŒã¿ããšããžã±ãŒã¹ãåœéæåã»ãããªã©ãããŸããŸãªå ¥åã§æ€èšŒããžãã¯ããã¹ãããŸããåäœãã¹ãã䜿çšããŠãæ€èšŒé¢æ°ãæ£ããæ©èœããŠããããšã確èªããŸãã
- ææ°ã®ç¶æ ãä¿ã€ïŒæœåšçãªã»ãã¥ãªãã£è匱æ§ã«å¯ŸåŠããææ°ã®ãã©ãŠã¶ããã³ãã¬ãŒã ã¯ãŒã¯ããŒãžã§ã³ãšã®äºææ§ã確ä¿ããããã«ãæ€èšŒããžãã¯ãšã©ã€ãã©ãªãææ°ã®ç¶æ ã«ä¿ã¡ãŸãã
- ã»ãã¥ãªãã£ã¬ãã¥ãŒïŒã€ã³ãžã§ã¯ã·ã§ã³æ»æãã¯ãã¹ãµã€ãã¹ã¯ãªããã£ã³ã°ïŒXSSïŒãªã©ã®æœåšçãªã»ãã¥ãªãã£è匱æ§ãç¹å®ã察åŠããããã«ãæ€èšŒã«ãŒã«ã宿çã«ã¬ãã¥ãŒããŸããå€éšAPIãããŒã¿ããŒã¹ãšããåãããããŒã¿ã«ã¯ç¹ã«æ³šæãæã£ãŠãã ããã
ã°ããŒãã«ã¢ããªã±ãŒã·ã§ã³ãžã®åå®å šãªæ€èšŒã®çµ±å
ããã§ã¯ãåå®å šãªæ€èšŒãå®éã®ã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªã¢ããªã±ãŒã·ã§ã³ã«çµ±åããæ¹æ³ã玹ä»ããŸãã
- ãã¬ãŒã ã¯ãŒã¯ã®éžæïŒReactãAngularãVue.jsã®ãããªã¢ãã³ãªããã³ããšã³ããã¬ãŒã ã¯ãŒã¯ãšãNode.jsãPython/DjangoãJava/Spring Bootã®ãããªããã¯ãšã³ãæè¡ãéžæããŸããäžçäžã®éçºè ããããã®çš®é¡ã®ãã©ãããã©ãŒã ãå©çšããŠãããããããã¯éèŠã§ãã
- ããŒã¿ã¢ãã«ã®å®çŸ©ïŒãã©ãŒã ã®ããŒã¿æ§é ã衚ãTypeScriptã€ã³ã¿ãŒãã§ãŒã¹ãŸãã¯åãäœæãããã¹ãŠã®å ¥åãã£ãŒã«ãã«åŒ·åãªåä»ãã確å®ã«é©çšããŸãã
- æ€èšŒããžãã¯ã®å®è£ ïŒäžèšã®äŸã§ç€ºããããã«ãåå ¥åãã£ãŒã«ãã«å¯ŸããŠåå®å šãªæ€èšŒé¢æ°ãå®è£ ããŸããããã»ã¹ãç°¡çŽ åããããã«ãæ€èšŒã©ã€ãã©ãªã®äœ¿çšãæ€èšããŠãã ããã
- ã¯ã©ã€ã¢ã³ããµã€ãçµ±åïŒæ€èšŒé¢æ°ãããã³ããšã³ãã³ã³ããŒãã³ãã«çµ±åããŸããã€ãã³ããªã¹ããŒïŒäŸïŒ`onChange`ã`onBlur`ã`onSubmit`ïŒã䜿çšããŠæ€èšŒãããªã¬ãŒããŸãã察å¿ããå ¥åãã£ãŒã«ãã®è¿ãã«ãšã©ãŒã¡ãã»ãŒãžã衚瀺ããŸãã
- ãµãŒããŒãµã€ãçµ±åïŒããŒã¿ã®æŽåæ§ãšã»ãã¥ãªãã£ã確ä¿ããããã«ããµãŒããŒãµã€ãã§æ€èšŒããžãã¯ãè€è£œããŸããããã¯ããŒã¿äŸµå®³ãäžæ£ã¢ã¯ã»ã¹ãåé¿ããããã«äžå¯æ¬ ã§ããé©åãªèªèšŒããã³èªå¯ã¡ã«ããºã ã䜿çšããŠAPIãä¿è·ããŸãã
- åœéåãšããŒã«ã©ã€ãŒãŒã·ã§ã³ïŒI18n/L10nïŒïŒ
- ãšã©ãŒã¡ãã»ãŒãžã®ç¿»èš³ïŒi18nã©ã€ãã©ãªã䜿çšããŠãæ€èšŒãšã©ãŒã¡ãã»ãŒãžãè€æ°ã®èšèªã«ç¿»èš³ããŸãã
- æ¥ä»ãšæå»ã®åœ¢åŒã®åŠçïŒãŠãŒã¶ãŒã®ãã±ãŒã«ã«åŸã£ãŠæ¥ä»ãšæå»ããã©ãŒãããããã³è§£æããããã«ã©ã€ãã©ãªã䜿çšããŸãã
- éè²šã®æžåŒèšå®ïŒãŠãŒã¶ãŒã®å°åã«åŸã£ãŠé貚å€ãæžåŒèšå®ããŸãã
- æ°å€ã®æžåŒèšå®ïŒå°æ°ç¹åºåãæåãæ¡åºåãæåãªã©ãããŸããŸãªæ°å€æžåŒèŠåãåŠçããŸãã
- ã¢ã¯ã»ã·ããªãã£ïŒé©åãªARIA屿§ã䜿çšããæç¢ºãªã©ãã«ãæäŸããååãªè²ã³ã³ãã©ã¹ãã確ä¿ããããšã§ããã©ãŒã ãéããã®ãããŠãŒã¶ãŒã«ã¢ã¯ã»ã¹å¯èœã§ããããšã確èªããŸããããã«ããããŠãŒã¶ãŒããŒã¹ãåºãããã°ããŒãã«ãªã¢ã¯ã»ã·ããªãã£åºæºã«æºæ ããŸãã
- ãã¹ãïŒããŸããŸãªå ¥åå€ãèšèªããã±ãŒã«ã§ãã©ãŒã ã培åºçã«ãã¹ãããŸããæ€èšŒé¢æ°ã®åäœãã¹ããšçµ±åãã¹ããå®è¡ããŠããã©ãŒã å šäœã®æ©èœãæ€èšŒããŸãã
- ç¶ç¶çã€ã³ãã°ã¬ãŒã·ã§ã³/ç¶ç¶çãããã€ã¡ã³ãïŒCI/CDïŒïŒã¢ããªã±ãŒã·ã§ã³ã®ãã«ãããã¹ãããããã€ãèªååããããã«CI/CDãã€ãã©ã€ã³ãå®è£ ããŸããããã«ããããã¹ãŠã®ç°å¢ã§æ€èšŒã«ãŒã«ãåžžã«é©çšãããããšãä¿èšŒãããŸãã
åå®å šãªæ€èšŒã®ããã®ããŒã«ãšã©ã€ãã©ãª
åå®å šãªãã©ãŒã æ€èšŒãç°¡çŽ åã§ããããŒã«ãšã©ã€ãã©ãªãããã€ããããŸãã
- TypeScriptïŒåå®å šãªéçºã®åºç€ã
- Validator.jsïŒã¡ãŒã«ãURLãªã©ã®ããŒã¿æ€èšŒçšã®ã©ã€ãã©ãªã
- YupïŒå€ã®è§£æãšæ€èšŒã®ããã®ã¹ããŒããã«ããŒãæè»ãªæ€èšŒãªãã·ã§ã³ãæäŸããè€éãªãã©ãŒã ã«çæ³çã§ãã
- ZodïŒTypeScriptãã¡ãŒã¹ãã®ã¹ããŒã宣èšãšæ€èšŒã©ã€ãã©ãªã匷åãªåä»ããšåªããéçºè ãšã¯ã¹ããªãšã³ã¹ãæäŸããŸãã
- Class-ValidatorïŒãã³ã¬ãŒã¿ã䜿çšããŠã¯ã©ã¹ã®ããããã£ãæ€èšŒã§ããŸããNestJSãªã©ã®ãã¬ãŒã ã¯ãŒã¯ãšçµã¿åãããŠäœ¿çšãããšäŸ¿å©ã§ãã
- React Hook FormïŒãã©ãŒã åŠçãšæ€èšŒãç°¡çŽ åããReactã©ã€ãã©ãªã§ãReactããŒã¹ã®ã¢ããªã±ãŒã·ã§ã³ã§ç¹ã«åœ¹ç«ã¡ãŸãã
- Angular FormsïŒãã©ãŒã åŠçãšæ€èšŒã®ããã®çµã¿èŸŒã¿Angularã¢ãžã¥ãŒã«ã
- Vue.js Form Validation LibrariesïŒæ€èšŒçšã®ããŸããŸãªVue.jsã©ã€ãã©ãªãå©çšå¯èœã§ãã
çµè«
åå®å šãªå ¥åæ€èšŒã¯ãå®å šã§ä¿¡é Œæ§ãé«ãããŠãŒã¶ãŒãã¬ã³ããªãŒãªWebã¢ããªã±ãŒã·ã§ã³ãæ§ç¯ããããã«äžå¯æ¬ ã§ããåãã¿ãŒã³ãšãã¹ããã©ã¯ãã£ã¹ã掻çšããããšã§ãã³ãŒãã®å質ãå€§å¹ ã«åäžããããšã©ãŒãæžãããã°ããŒãã«ãªãªãŒãã£ãšã³ã¹ã«å¯Ÿããå šäœçãªãŠãŒã¶ãŒãšã¯ã¹ããªãšã³ã¹ãåäžãããããšãã§ããŸãããããã®ææ³ãæ¡çšããããšã§ãWebãã©ãŒã ãå ç¢ã§ä¿å®å¯èœã§ãããäžçäžã®é¢é£ããããŒã¿ãã©ã€ãã·ãŒèŠå¶ã«æºæ ããŠããããšãä¿èšŒããã®ã«åœ¹ç«ã¡ãŸããWebãé²åããã«ã€ããŠãå ¥åæ€èšŒã®æ¹æ³ãé²åããŸãããåå®å šæ§ãšå ç¢ãªæ€èšŒãšããæ žãšãªãååã¯å€ãããŸããããããã®æŠç¥ãå®è£ ããããšã¯ãããããã°ããŒãã«ã«ã¢ã¯ã»ã¹å¯èœãªWebã¢ããªã±ãŒã·ã§ã³ã®æåã«ãšã£ãŠäžå¯æ¬ ãªã䟡å€ã®ããæè³ã§ãã